<?php

class Usuarios extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->datosusuario = $this->authentication->getDataLogged();
        $this->load->model('m_usuario', 'usuario');
    }

    /**
     * Listado de usuarios.
     *
     * @return void
     */
    function index() {
        $usuarios = $this->usuario->getList(array('estado' => 1));

        $this->load->model('m_tipo_usuario', 'tipo_usuario');
        $tipo_usuario_array = $this->tipo_usuario->getList();
        foreach ($tipo_usuario_array as $value) {
            $tipo_usuario[$value->id] = $value->nombre;
        }

        $data = array(
            'titulo' => 'Listado de Usuarios',
            'datosusuario' => $this->datosusuario,
            'usuarios' => $usuarios,
            'tipo_usuario' => $tipo_usuario,
            'seleccionar' => 'usuarios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('usuarios/leftbar');
        $this->load->view('usuarios/index');
        $this->load->view('templates/footer');
    }

    /**
     * Listado de usuarios eliminados.
     *
     * @return void
     */
    function eliminados() {
        $usuarios = $this->usuario->getList(array('estado' => 0));

        $this->load->model('m_tipo_usuario', 'tipo_usuario');
        $tipo_usuario_array = $this->tipo_usuario->getList();
        foreach ($tipo_usuario_array as $value) {
            $tipo_usuario[$value->id] = $value->nombre;
        }

        $data = array(
            'titulo' => 'Listado de Usuarios Eliminados',
            'datosusuario' => $this->datosusuario,
            'usuarios' => $usuarios,
            'tipo_usuario' => $tipo_usuario,
            'eliminados' => true,
            'seleccionar' => 'usuarios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('usuarios/leftbar');
        $this->load->view('usuarios/index');
        $this->load->view('templates/footer');
    }

    /**
     * Listado de usuarios eliminados.
     *
     * @return void
     */
    function estudio($id) {
        if ($id == '')
            redirect('usuarios/');

        $usuarios = $this->usuario->getList(array('estudioId' => (int) $id));

        $this->load->model('m_tipo_usuario', 'tipo_usuario');
        $tipo_usuario_array = $this->tipo_usuario->getList();
        foreach ($tipo_usuario_array as $value) {
            $tipo_usuario[$value->id] = $value->nombre;
        }

        $this->load->model('m_estudio', 'estudio');

        $this->estudio->get((int) $id);

        $data = array(
            'titulo' => 'Listado de Usuarios del estudio: <a href="' . base_url('estudios/editar/' . $this->estudio->id) . '">' . $this->estudio->nombre . '</a>',
            'datosusuario' => $this->datosusuario,
            'usuarios' => $usuarios,
            'tipo_usuario' => $tipo_usuario,
            'eliminados' => true,
            'seleccionar' => 'usuarios',
        );

        $this->load->view('templates/header', $data);
        $this->load->view('templates/topbar');
        $this->load->view('usuarios/leftbar');
        $this->load->view('usuarios/index');
        $this->load->view('templates/footer');
    }

    /**
     * Crea un nuevo usuario.
     *
     * @return void
     */
    function nuevo() {

        $this->form_validation->set_rules($this->usuario->getValidacion());
        if ($this->form_validation->run() === FALSE) {
            if (isset($_POST['submit'])) {
                set_message(array('3' => validation_errors()));
                $usuario = $_POST;
            } else {
                $usuario = $this->usuario->valoresPorDefecto();
            }

            $data = $this->_get_form_data();

            $data['titulo'] = 'Nuevo Usuario';
            $data['usuario'] = $usuario;
            $data['seleccionar'] = 'usuarios';

            $this->load->view('templates/header', $data);
            $this->load->view('templates/topbar');
            $this->load->view('usuarios/leftbar');
            $this->load->view('usuarios/form');
            $this->load->view('templates/footer');
        } else {
            $this->usuario->setAttributes($this->input);

            $this->usuario->id = null;
            $this->usuario->contrasenia = md5($this->usuario->contrasenia);
            $this->usuario->estudioId = ($this->usuario->estudioId != '') ? $this->usuario->estudioId : null;
            $this->usuario->estado = 1;

            $this->usuario->save();

            set_message(array('1' => 'Se ha agregado el usuario: "' . $this->usuario->usuario . '".'));

            redirect('usuarios/');
        }
    }

    /**
     * Edita un usuario.
     *
     * @param integer $id El ID del usuario para editar.
     * @return void
     */
    function editar($id = '') {

        if ($id == '')
            redirect('usuarios/');

        if ($this->datosusuario['tipoId'] != 1 AND $id != $this->datosusuario['id'])
            redirect('usuarios/editar/' . $this->datosusuario['id']);


        if ($this->usuario->get((int) $id)) {

            $this->form_validation->set_rules($this->usuario->getValidacion(true));
            if ($this->form_validation->run() === FALSE) {
                if (isset($_POST['submit'])) {
                    set_message(array('3' => validation_errors()));
                    $usuario = $_POST;
                } else {
                    $usuario = $this->usuario->doArray();
                }

                $data = $this->_get_form_data();

                $data['titulo'] = 'Editar Usuario';
                $data['usuario'] = $usuario;
                $data['seleccionar'] = 'usuarios';
                $data['editar'] = true;

                $this->load->view('templates/header', $data);
                $this->load->view('templates/topbar');
                if ($this->datosusuario['tipoId'] == 1) {
                    $this->load->view('usuarios/leftbar');
                } else {
                    $this->load->view('usuarios/leftbarempty');
                }
                $this->load->view('usuarios/form');
                $this->load->view('templates/footer');
            } else {
                $_POST['contrasenia'] = ($_POST['contrasenia'] == '') ? $this->usuario->contrasenia : md5($_POST['contrasenia']);
                $_POST['id'] = $this->usuario->id;

                $this->usuario->setAttributes($this->input);
                $this->usuario->estudioId = ($this->usuario->estudioId != '') ? $this->usuario->estudioId : null;
                $this->usuario->estado = 1;

                $this->usuario->save();

                set_message(array('1' => 'Se han editado los datos del usuario: ' . $this->usuario->usuario . '.'));

                redirect('usuarios/');
            }
        } else {
            redirect('usuarios/');
        }
    }

    /**
     * Elimina un usuario.
     *
     * @param integer $id El ID del usuario a eliminar.
     * @return void
     */
    function eliminar($id = '') {
        if ($id == '')
            redirect('usuarios/');

        if ($this->usuario->get((int) $id)) {
            $this->usuario->deleteLogico();

            set_message(array('1' => 'Se ha eliminado el usuario "' . $this->usuario->usuario . '".'));
        }
        redirect('usuarios/');
    }

    /**
     * Restaura un usuario eliminado.
     *
     * @param integer $id_usuario El ID del usuario a restaurar.
     * @return void
     */
    function restaurar($id = '') {
        if ($id == '')
            redirect('usuarios/');

        $this->usuario->get((int) $id);
        $this->usuario->activeLogico();

        set_message(array('1' => 'Se ha restauraro el usuario: "' . $this->usuario->usuario . '".'));

        redirect('usuarios/eliminados');
    }

    /**
     * Callback para la validacion de estudio si selecciona como tipo de usuario abogado.
     *
     * @param string $valor Es el valor selecionado en el dropdawn de estudios.
     * @return boolean
     */
    function _estudio_check($valor) {
        if ($this->input->post('tipoId') == 2) {
            if ($valor == '') {
                $this->form_validation->set_message('_estudio_check', "El campo Estudio es obligatorio si ha selecionado un tipo de usuarios Abogado.");
                return FALSE;
            } else {
                return TRUE;
            }
        } else {
            return TRUE;
        }
    }

    /**
     * Obtiene los datos para el formulario.
     *
     * @return array
     */
    private function _get_form_data() {

        $this->load->model('m_tipo_usuario', 'tipo_usuario');
        $this->load->model('m_estudio', 'estudio');

        $tipo_usuario_array = $this->tipo_usuario->getList();

        $tipo_usuario[''] = 'Seleccione un Tipo de Usuario';

        foreach ($tipo_usuario_array as $value) {
            $tipo_usuario[$value->id] = $value->nombre;
        }

        $estudios_array = $this->estudio->getList();

        $estudios[''] = 'Seleccione un Estudio';

        foreach ($estudios_array as $value) {
            $estudios[$value->id] = $value->nombre;
        }

        return $data = array(
            'datosusuario' => $this->datosusuario,
            'tipo_usuario' => $tipo_usuario,
            'estudios' => $estudios,
        );
    }

}

